package com.example.java.concurrent;

// 在并发编程中通常有用的实用类
public class ConcurrentMain {
}


// 关于 Concurrent 并发编程类的相关的使用参考官方文档 https://java.cunzaima.cn/jdk21/doc-zh/api/java.base/java/util/concurrent/package-summary.html
/*
主要包含以下类：
执行器:
1. Executor：用于执行 Runnable 任务的接口。
2. Executors：用于创建 Executor 实例的工具类。
3. Future：用于代表 Runnable 任务的执行结果的接口。
4. ThreadPoolExecutor：ExecutorService 的实现类，用于线程池的并发执行。
5. CompletionService：用于获取 Future 任务执行结果的接口。
6. FutureTask：Future 的实现类，用于包装 Runnable 任务的执行结果。
7. Callable：用于代表有返回值的 Runnable 任务的接口。
8. CompletableFuture：用于管理 Future 任务的工具类。

队列：
1. ArrayBlockingQueue：基于数组的阻塞队列，线程afe。
2. LinkedBlockingQueue：基于链表的阻塞队列，线程afe。
3. PriorityBlockingQueue：基于优先级的阻塞队列，线程afe。
4. DelayQueue：基于时间的阻塞队列，线程afe。
5. SynchronousQueue：不存储元素的阻塞队列，每个 put 操作必须等待一个 take 操作，线程afe。
7. LinkedBlockingDeque：基于链表的双向阻塞队列，线程afe。
8. LinkedTransferQueue：基于链表的无界阻塞队列，线程afe。

时间：
1. TimeUnit：用于表示时间单位的枚举类。
2. ScheduledExecutorService：用于定时执行 Runnable 任务的接口。
3. Timer：用于定时执行任务的工具类。
4. Date：用于表示日期和时间的类。
5. Calendar：用于操作日期和时间的类。
6. Instant：用于表示时间点的类。
7. Duration：用于表示时间段的类。

锁：
1. Lock：用于控制多个线程对共享资源的访问的接口。
2. ReentrantLock：Lock 的实现类，可重入锁。
3. ReadWriteLock：用于控制多个读线程和写线程对共享资源的访问的接口。
4. StampedLock：用于控制多个线程对共享资源的访问，支持乐观读和悲观读。
5. Semaphore：用于控制对共享资源的访问的接口。

同步器：
1. CountDownLatch：用于等待多个线程完成操作的同步器。
2. CyclicBarrier：用于等待多个线程到达某个屏障点后再继续执行的同步器。
3. Phaser：用于等待多个线程到达某个phaser点后再继续执行的同步器。
4. Exchanger：用于两个线程间交换数据，线程afe。

并发集合：
1. CopyOnWriteArrayList：用于并发访问的 ArrayList。
2. ConcurrentHashMap：用于并发访问的 HashMap。
3. ConcurrentLinkedQueue：用于并发访问的队列。
4. ConcurrentSkipListMap：用于并发访问的 TreeMap。

内存一致性属性：
1. volatile：可见性。
2. synchronized：原子性。
3. final：不可变性。
4. ThreadLocal：线程局部变量。
*/